package com.hospital.workstation.service;

import com.hospital.common.core.domain.R;
import com.hospital.workstation.domain.HisMedicalOrders;
import com.hospital.workstation.domain.vo.HisMedicalOrdersVo;
import com.hospital.workstation.domain.bo.HisMedicalOrdersBo;
import com.hospital.common.core.page.TableDataInfo;
import com.hospital.common.core.domain.PageQuery;
import com.hospital.workstation.domain.vo.MedicalRecordVo;
import com.hospital.workstation.domain.vo.TimerShaftVo;

import java.util.Collection;
import java.util.List;

/**
 * 医嘱Service接口
 *
 * @author whb
 * @date 2023-03-10
 */
public interface IHisMedicalOrdersService {

    /**
     * 查询医嘱
     */
    HisMedicalOrdersVo queryById(Long id);

    /**
     * 查询医嘱列表
     */
    TableDataInfo<HisMedicalOrdersVo> queryPageList(HisMedicalOrdersBo bo, PageQuery pageQuery);

    /**
     * 查询医嘱列表
     */
    List<HisMedicalOrdersVo> queryList(HisMedicalOrdersBo bo);

    /**
     * 新增医嘱
     */
    Boolean insertByBo(HisMedicalOrdersBo bo);

    /**
     * 修改医嘱
     */
    Boolean updateByBo(HisMedicalOrdersBo bo);

    /**
     * 校验并批量删除医嘱信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询HIS医嘱用药列表
     *
     * @param medicalRecordNo 药历号
     * @return
     */
    R<List<MedicalRecordVo>> queryListByMedicalRecordNo(Integer medicalRecordNo);

    /**
     * 查询患者医嘱用药信息
     *
     * @param medicalRecordNo 病历号
     * @param orderCategory   医嘱类别（1西药 2中成药 3中药饮片）
     * @return
     */
    R<TimerShaftVo> queryTimerShaft(Integer medicalRecordNo, String orderCategory);

    /**
     * 根据医嘱明细Id查询医嘱
     *
     * @param orderItemID 医嘱明细Id
     * @return
     */
    HisMedicalOrders queryByOrderItemId(String orderItemID);

    /**
     * 分组显示用药时间轴数据
     *
     * @param medicalRecordNo 病历号
     * @param category        类别（1长嘱 2临嘱 3中药饮片）
     * @return
     */
    R<TimerShaftVo> queryTimerShaftShowGroup(Integer medicalRecordNo, String category);

    /**
     * 查询HIS医嘱用药列表（分组）
     *
     * @param medicalRecordNo 病历号
     * @param category        类别（1长嘱 2临嘱 3中药饮片）
     * @return
     */
    R<List<MedicalRecordVo>> queryOrdersListToGroup(Integer medicalRecordNo, String category);
}
